#![allow(unused_imports, non_snake_case, non_camel_case_types)]
use super::windows::*;
use super::*;

#[repr(C)]
pub struct IDWriteFontFamilyVtbl {
	pub parent: IDWriteFontListVtbl,
	pub GetFamilyNames: unsafe extern "system" fn(This: *mut IDWriteFontFamily, names: *mut *mut IDWriteLocalizedStrings) -> HRESULT,
	pub GetFirstMatchingFont: unsafe extern "system" fn(This: *mut IDWriteFontFamily, weight: DWRITE_FONT_WEIGHT, stretch: DWRITE_FONT_STRETCH, style: DWRITE_FONT_STYLE, matchingFont: *mut *mut IDWriteFont) -> HRESULT,
	pub GetMatchingFonts: unsafe extern "system" fn(This: *mut IDWriteFontFamily, weight: DWRITE_FONT_WEIGHT, stretch: DWRITE_FONT_STRETCH, style: DWRITE_FONT_STYLE, matchingFonts: *mut *mut IDWriteFontList) -> HRESULT,
}
#[repr(C)]
pub struct IDWriteFontFamily {
	pub lpVtbl: *const IDWriteFontFamilyVtbl,
}
impl IDWriteFontFamily {
	#[inline]
	pub unsafe fn GetFamilyNames(&self, names: *mut *mut IDWriteLocalizedStrings) -> HRESULT {
		((*self.lpVtbl).GetFamilyNames)(self as *const _ as *mut _, names)
	}
	#[inline]
	pub unsafe fn GetFirstMatchingFont(&self, weight: DWRITE_FONT_WEIGHT, stretch: DWRITE_FONT_STRETCH, style: DWRITE_FONT_STYLE, matchingFont: *mut *mut IDWriteFont) -> HRESULT {
		((*self.lpVtbl).GetFirstMatchingFont)(self as *const _ as *mut _, weight, stretch, style, matchingFont)
	}
	#[inline]
	pub unsafe fn GetMatchingFonts(&self, weight: DWRITE_FONT_WEIGHT, stretch: DWRITE_FONT_STRETCH, style: DWRITE_FONT_STYLE, matchingFonts: *mut *mut IDWriteFontList) -> HRESULT {
		((*self.lpVtbl).GetMatchingFonts)(self as *const _ as *mut _, weight, stretch, style, matchingFonts)
	}
}
impl core::ops::Deref for IDWriteFontFamily {
	type Target = IDWriteFontList;
	#[inline]
	fn deref(&self) -> &IDWriteFontList {
		unsafe { &*(self as *const IDWriteFontFamily as *const IDWriteFontList) }
	}
}
impl Interface for IDWriteFontFamily {
	#[inline]
	fn uuidof() -> GUID {
		GUID { Data1: 0xda20d8ef, Data2: 0x812a, Data3: 0x4c43, Data4: [0x98, 0x02, 0x62, 0xec, 0x4a, 0xbd, 0x7a, 0xdd] }
	}
}

#[repr(C)]
pub struct IDWriteFontListVtbl {
	pub parent: IUnknownVtbl,
	pub GetFontCollection: unsafe extern "system" fn(This: *mut IDWriteFontList, fontCollection: *mut *mut IDWriteFontCollection) -> HRESULT,
	pub GetFontCount: unsafe extern "system" fn(This: *mut IDWriteFontList) -> UINT32,
	pub GetFont: unsafe extern "system" fn(This: *mut IDWriteFontList, index: UINT32, font: *mut *mut IDWriteFont) -> HRESULT,
}
#[repr(C)]
pub struct IDWriteFontList {
	pub lpVtbl: *const IDWriteFontListVtbl,
}
impl IDWriteFontList {
	#[inline]
	pub unsafe fn GetFontCollection(&self, fontCollection: *mut *mut IDWriteFontCollection) -> HRESULT {
		((*self.lpVtbl).GetFontCollection)(self as *const _ as *mut _, fontCollection)
	}
	#[inline]
	pub unsafe fn GetFontCount(&self) -> UINT32 {
		((*self.lpVtbl).GetFontCount)(self as *const _ as *mut _)
	}
	#[inline]
	pub unsafe fn GetFont(&self, index: UINT32, font: *mut *mut IDWriteFont) -> HRESULT {
		((*self.lpVtbl).GetFont)(self as *const _ as *mut _, index, font)
	}
}
impl core::ops::Deref for IDWriteFontList {
	type Target = IUnknown;
	#[inline]
	fn deref(&self) -> &IUnknown {
		unsafe { &*(self as *const IDWriteFontList as *const IUnknown) }
	}
}
impl Interface for IDWriteFontList {
	#[inline]
	fn uuidof() -> GUID {
		GUID { Data1: 0x1a0d8438, Data2: 0x1d97, Data3: 0x4ec1, Data4: [0xae, 0xf9, 0xa2, 0xfb, 0x86, 0xed, 0x6a, 0xcb] }
	}
}
